package com.admin.qujiang.util;

import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * 日期格式转换工具类
 * Created by ht on 2018/6/5.
 *
 * @author ht
 */
public class TimeFormatUtils {
    private static final String DATA_PATTERN = "yyyy-MM-dd";
    private static final String DATA_TINE_PATTERN = "yyyy-MM-dd HH:mm:ss";

    /**
     * 将长时间格式字符串转换为时间 yyyy-MM-dd HH:mm:ss
     *
     * @param strDate 日期字符串
     * @return yyyy-MM-dd HH:mm:ss 时间
     */
    public static Date strToLongDate(String strDate) {
        SimpleDateFormat formatter = new SimpleDateFormat(DATA_TINE_PATTERN);
        ParsePosition position = new ParsePosition(0);
        return formatter.parse(strDate, position);
    }

    /**
     * 将长时间格式时间转换为字符串 yyyy-MM-dd HH:mm:ss
     *
     * @param dateDate 日期
     * @return yyyy-MM-dd HH:mm:ss字符串
     */
    public static String dateToLongStr(Date dateDate) {
        SimpleDateFormat formatter = new SimpleDateFormat(DATA_TINE_PATTERN);
        return formatter.format(dateDate);
    }

    /**
     * 将短时间格式字符串转换为时间 yyyy-MM-dd
     *
     * @param strDate 日期字符串
     * @return yyyy-MM-dd 时间
     */
    public static Date strToDate(String strDate) {
        SimpleDateFormat formatter = new SimpleDateFormat(DATA_PATTERN);
        ParsePosition position = new ParsePosition(0);
        return formatter.parse(strDate, position);
    }

    /**
     * 将短时间格式时间转换为字符串 yyyy-MM-dd
     *
     * @param dateDate 日期
     * @return yyyy-MM-dd 字符串
     */
    public static String dateToStr(Date dateDate) {
        SimpleDateFormat formatter = new SimpleDateFormat(DATA_PATTERN);
        return formatter.format(dateDate);
    }

    /**
     * 将短时间格式时间转换为字符串 yyyy-MM-dd或者null
     *
     * @param dateDate 日期
     * @return yyyy-MM-dd 字符串
     */
    public static String dateToStrOrNull(Date dateDate) {
        if (dateDate == null) {
            return null;
        }
        return dateToStr(dateDate);
    }

    /**
     * 整理字符串日期格式
     * 将 yyyy-M-D字符串 转换为 yyyy-MM-dd HH:mm:ss字符串
     *
     * @param strDate yyyy-M-D格式的字符串
     * @return yyyy-MM-dd HH:mm:ss 字符串
     */
    public static String formatStrDate(String strDate) {
        Date patternDate = strToDate(strDate);
        return dateToLongStr(patternDate);
    }

    /**
     * 将 yyyy-M-D字符串 转换为 yyyy-MM-01 HH:mm:ss字符串
     *
     * @param strDate yyyy-M-D格式的字符串
     * @return yyyy-MM-01 HH:mm:ss 字符串
     */
    public static String formatStrFirstDate(String strDate) {
        Date patternDate = strToDate(strDate);
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(patternDate);
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH);
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        // 1号的日期
        patternDate = calendar.getTime();
        return dateToLongStr(patternDate);
    }
}